module.exports = async ctx => {
  ctx.type = ctx.type || 'application/json'
  switch (ctx.status) {
    case 200:
      ctx.body = {
        status: ctx.status,
        code: '10000',
        message: ctx.customMsg || 'Success',
        msg: ctx.customMsg || 'Success',
        result: ctx.originData
      }
      break
    case 201:
      ctx.body = {
        status: ctx.status,
        code: '10001',
        message: ctx.customMsg || 'Created',
        msg: ctx.customMsg || 'Created',
        result: ctx.originData
      }
      break
    case 203:
      ctx.body = {
        status: 203,
        code: '10003',
        message: ctx.customMsg || 'Non-Authoritative Information',
        msg: ctx.customMsg || 'Non-Authoritative Information',
        result: ctx.originData
      }
      break
    case 204:
      ctx.body = {
        status: ctx.status,
        code: '10004',
        message: ctx.customMsg || 'Deleted',
        msg: ctx.customMsg || 'Deleted',
        result: ctx.originData
      }
      break
    case 400:
      ctx.body = {
        status: ctx.status,
        code: '10400',
        message: ctx.customMsg || 'Bad Request',
        msg: ctx.customMsg || 'Bad Request',
        result: ctx.originData
      }
      break
    case 401:
      ctx.body = {
        status: ctx.status,
        code: '10401',
        message: ctx.customMsg || 'Unauthorized',
        msg: ctx.customMsg || 'Unauthorized',
        result: {}
      }
      break
    case 403:
      ctx.body = {
        status: ctx.status,
        code: '10403',
        message: ctx.customMsg || 'Forbidden',
        msg: ctx.customMsg || 'Forbidden',
        result: {}
      }
      break
    case 404:
      ctx.body = {
        status: ctx.status,
        code: '10404',
        message: ctx.customMsg || 'Not Found',
        msg: ctx.customMsg || 'Not Found',
        result: ctx.originData
      }
      break
    case 405:
      ctx.body = {
        status: ctx.status,
        code: '10405',
        message: ctx.customMsg || 'Method Not Allowed',
        msg: ctx.customMsg || 'Method Not Allowed',
        result: {}
      }
      break
    case 409:
      ctx.body = {
        status: ctx.status,
        code: '10410',
        message: ctx.customMsg || 'Incomplete parameters',
        msg: ctx.customMsg || 'Incomplete parameters',
        result: {}
      }
      break
    case 410:
      ctx.body = {
        status: ctx.status,
        code: '10410',
        message: ctx.customMsg || 'Gone',
        msg: ctx.customMsg || 'Gone',
        result: {}
      }
      break
    case 415:
      ctx.body = {
        status: ctx.status,
        code: '10415',
        message: ctx.customMsg || 'Unsupported Media Type',
        msg: ctx.customMsg || 'Unsupported Media Type',
        result: {}
      }
      break
    case 422:
      ctx.body = {
        status: ctx.status,
        code: '10422',
        message: ctx.customMsg || 'Unprocessable Entity',
        msg: ctx.customMsg || 'Unprocessable Entity',
        result: {}
      }
      break
    case 429:
      ctx.body = {
        status: ctx.status,
        code: '10429',
        message: ctx.customMsg || 'Too Many Requests',
        msg: ctx.customMsg || 'Too Many Requests',
        result: {}
      }
      break
    default:
      ctx.app.emit('error', ctx.originData)
      ctx.body = {
        status: ctx.status,
        code: `10${ctx.status}`,
        message: ctx.customMsg || 'Service Unavailable',
        msg: ctx.customMsg || 'Service Unavailable',
        result: ctx.originData
      }
      break
  }
}
